home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgramD2.iso / Borland / Borland C++ V5.02 / DIAGXPRT.PAK / CBACK.CPP next >
C/C++ Source or Header  |  1997-05-06  |  2KB  |  76 lines

  1. //----------------------------------------------------------------------------
  2. // ObjectWindows
  3. // (C) Copyright 1993, 1995 by Borland International, All Rights Reserved
  4. //
  5. //----------------------------------------------------------------------------
  6.  
  7. //
  8. // Because we are called from toolhelp on another task data segment, it is
  9. // critical to overide the default entry code settings here in order to
  10. // force it to: ds!=ss and explicit export:
  11. //
  12. #pragma option -WE
  13.  
  14. #include <owl/pch.h>
  15. #include <toolhelp.h>
  16. #include "diagxprt.h"
  17.  
  18.  
  19. //
  20. // Callback is just used for correctly adjusting the data segment - this
  21. // function being MakeProcInstance'd by SetupWindow(). This is critical
  22. // because TOOLHELP calls this function on the other task data segment.
  23. // Then it calls TDiagClient::NotifyCallback thru the static "this" pointer.
  24. //
  25. int CALLBACK __export
  26. Callback(WORD id, DWORD data) {
  27.   // Now that the data segment is correctly set to our task's, call it:
  28.   //
  29.   switch (id) {
  30.  
  31. #if 0  // This seems to be redundant
  32.     case NFY_LOGPARAMERROR: {
  33.       NFYLOGPARAMERROR FAR *param = (NFYLOGPARAMERROR FAR *)data;
  34.       TDispData* d = new TDispData;
  35.  
  36.       strcpy(d->ProcName, TDiagClient::pThis->GetProcName(param->lpfnErrorAddr));
  37.  
  38.       strcpy(d->ModuleName, TDiagClient::pThis->GetTaskName());
  39.  
  40.       d->ErrorCode = ((NFYLOGPARAMERROR FAR*)data)->wErrCode;
  41.       d->Param = ((NFYLOGPARAMERROR FAR*)data)->lpBadParam;
  42.  
  43.       TDiagClient::pThis->PostMessage(CM_LOGPARAMERROR,0,(LPARAM)d);
  44.       break;
  45.     }
  46. #endif
  47.  
  48.     case NFY_LOGERROR: {
  49.       TDispData* d = new TDispData;
  50.  
  51.       strcpy(d->ModuleName, TDiagClient::pThis->GetTaskName());
  52.       
  53.       d->ErrorCode = ((NFYLOGERROR FAR*)data)->wErrCode;
  54.       d->Data = (DWORD)((NFYLOGERROR FAR*)data)->lpInfo;
  55.       TDiagClient::pThis->PostMessage(CM_LOGERROR, 0, (LPARAM)d);
  56.       break;
  57.     }
  58.  
  59.     case NFY_OUTSTR: {
  60.       TDispData *d=new TDispData;
  61.  
  62.       char far *dStr = (LPSTR)data;
  63.       strcpy( d->ProcName, dStr);
  64.       TDiagClient::pThis->PostMessage(CM_OUTSTR, 0, (LPARAM)d);
  65.       break;
  66.     }
  67.  
  68.     default:
  69.       // Other toolhelp notifications can be handled.
  70.       // Make sure that diagxprt.cpp is updated to match
  71.       // TDiagClient::pThis->PostMessage(CM_DEFAULT, id, 0);
  72.       break;
  73.   }
  74.   return false;
  75. }
  76.